package 力扣_排序算法.对Map中的value排序;

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

/**
 * @author zx
 * @create 2024-02-08 22:51
 */
public class 自定义规则排序 {
    /**
     * XX市机场停放了多架飞机，每架飞机都有自己的航班号CA3385,CZ6678,SC6508等，
     * 航班号的前2个大写字母(或数字)代表航空公司的缩写，后面4个数字代表航班信息。
     * 但是XX市机场只有一条起飞用跑道，调度人员需要安排目前停留在机场的航班有序起飞。
     * 为保障航班的有序起飞，调度员首先按照航空公司的缩写(航班号前2个字母)对所有航班进行排序，
     * 同一航空公司的航班再按照航班号的后4个数字进行排序最终获得安排好的航班的起飞顺序。
     * 请编写一段代码根据输入的航班号信息帮助调度员输出航班的起飞顺序。说明:
     * 航空公司缩写排序按照从特殊符号$&*,0~9,A~Z排序；
     * 输入描述
     * 第一行输入航班信息，多个航班号之间用逗号(","分隔，输入的航班号不超过100个例如:
     * CA3385,CZ6678,SC6508,DU7523,HK4456,MK0987
     * 备注:航班号为6位长度，后4位为纯数字，不考虑存在后4位重复的场景
     * 输出描述
     * CA3385,CZ6678,DU7523,HK4456,MK0987,SC6508
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        String[] arr = str.split(",");
        Arrays.sort(arr, new MyComparator());
        String res = String.join(",", arr);
        System.out.println(res);
    }

    private static class MyComparator implements Comparator<String> {
        //自定义排序规则
        private final String order = "$&*,0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        @Override
        public int compare(String str1, String str2) {
            //比较第一个字母
            int index1_1 = order.indexOf(str1.charAt(0));
            int index2_1 = order.indexOf(str2.charAt(0));
            if (index1_1 != index2_1) {
                return Integer.compare(index1_1, index2_1);
            }
            //比较第二个字母
            int index1_2 = order.indexOf(str1.charAt(1));
            int index2_2 = order.indexOf(str2.charAt(1));
            if (index1_2 != index2_2) {
                return Integer.compare(index1_2, index2_2);
            }
            //前两个字母相同的情况下比较后四位数字
            int number1 = Integer.parseInt(str1.substring(2));
            int number2 = Integer.parseInt(str2.substring(2));
            return Integer.compare(number1, number2);
        }
    }
}
